<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

    <script>
        // let o = {
        //     x: "xixi"
        // }
        // let p = Object.defineProperties({}, {
        //     x: {
        //         value: 1,
        //         writable: true,
        //         enumerable: true,
        //         configurable: true
        //     },
        //     y: {
        //         value: 2,
        //         writable: false,
        //         enumerable: false,
        //         configurable: true
        //     }
        // })
        // console.log(p)

        // let a = 10;
        // console.log(delete window.a);
        // console.log(window)

        // var a = 10;
        // console.log(delete window.a);
        // console.log(window)

        // let o = Object.defineProperty({
        //     x: 1
        // }, "x", {
        //     value: "3",
        //     writable: true,
        //     enumerable: true,
        //     configurable: true
        // })

        // console.log(delete o.x)

        // let x = 1;
        // let arr = [x + 1, x + 2];
        // console.log(arr)

        // let x = [1, , 3];
        // let y = [, , ];
        // console.log(x, y)

        // let a = [1, 2, 3];
        // Object.defineProperty(a, "length", {
        //     writable: false
        // })

        // a.length = 5;
        // console.log(a)

        // let arr = ["a", "b", "c"];
        // for (let i in arr) {
        //     console.log(arr[i])
        // }

        // let arr = [1, 2, 3, 4, 5];

        // arr.reduce(function(oldVal, newVal, index, obj) {
        //     console.log(oldVal, newVal, index, obj)
        //     return oldVal + newVal
        // })

        // let newArr = arr.fill(7, 1, 3)
        // console.log(arr, newArr);

        // console.log(arr.includes(1))
        // var obj1 = {
        //     a: undefined,
        //     b: function() {

        //     },
        //     c: Symbol("foo"),
        //     d: {
        //         name: "xixi",
        //         age: 20
        //     }
        // }

        // var obj2 = {};

        // function deepCopy(o1, o2) {
        //     for (let key in o1) {
        //         if (typeof(o1[key]) == "object") {
        //             o2[key] = Array.isArray(o1[key]) ? [] : {};
        //             deepCopy(o1[key], o2[key])
        //         } else {
        //             o2[key] = o1[key]
        //         }
        //     }
        //     return o2
        // }

        // let x = deepCopy(obj1, obj2)
        // console.log(x)


        // 递归
        // function fn(x) {
        //     if (x <= 1) {
        //         return 1
        //     }
        //     return x * fn(x - 1)
        // }
        // let x = fn(5)
        // console.log(x)


        //1.初始值
        //2.比较条件
        //3.限制条件
        // var a = 1;
        // while (a > 10) {
        //     console.log(a)
        //     a++;
        // }

        // for (let i = 1; i < 10; i++) {
        //     for (let j = 1; j <= i; j++) {
        //         // document.write(i + "*" + j + "=" + i * j)
        //         document.write(`${i}*${j}=${i*j}`) //ES6模板字符串
        //     }
        //     document.write("<br>")
        // }

        // let str = "hello";
        // str.substr()

        // let o1 = {
        //     name: "xixi"
        // }
        // let o2 = {
        //     name: 20
        // }
        // let o3 = Object.assign(o1, o2); //o1 目标对象   o2 源对象
        // console.log(o1)

        // let o1 = {
        //     name: "xixi",
        //     obj: {
        //         x: 20
        //     }
        // }
        // let o2 = Object.assign({}, o1);
        // o2.obj.x = "hello"
        // console.log(o1, o2)



        // let arr1 = [1, 2]
        // let arr2 = ["hello"]
        // let arr3 = arr1.concat(arr2)
        // console.log(arr3)


        // concat() 拼接  
        // let str1 = "hello";
        // let str2 = "world";
        // let str3 = str1.concat(str2);
        // console.log(str3)

        // let o = {
        //     name: "xixi",
        //     unf: undefined,
        //     result: [{
        //         data: 1
        //     }, {
        //         cont: "xixi"
        //     }],
        //     fn: function() {
        //         console.log(100)
        //     }

        // }

        // let temp = JSON.parse(JSON.stringify(o));
        // temp.result[0].data = "world";
        // console.log(o, temp)

        // let o = {
        //     name: "xixi",
        //     unf: undefined,
        //     result: [{
        //         data: 1
        //     }, {
        //         cont: "xixi"
        //     }],
        //     fn: function() {
        //         console.log(100)
        //     }

        // }

        // let o2 = {};


        // function deepCopy(obj1, obj2) {
        //     for (let key in obj1) {
        //         if (typeof(obj1[key]) === "object") {
        //             obj2[key] = Array.isArray(obj1[key]) ? [] : {}
        //             deepCopy(obj1[key], obj2[key]);
        //         } else {
        //             obj2[key] = obj1[key]
        //         }
        //     }
        // }

        // deepCopy(o, o2)




        let o1 = {
            age: 20,
            obj: {
                name: "hello"
            }
        }

        let o2 = {}

        function deepCopy(obj1, obj2) {
            for (let key in obj1) {

                if (typeof(obj1[key]) === "object") {
                    obj2[key] = Array.isArray(obj1[key]) ? [] : {};
                    deepCopy(obj1[key], obj2[key]);
                } else {
                    obj2[key] = obj1[key];
                }
            }
            return obj2;
        }

        let x1 = deepCopy(o1, o2)
        console.log(x1)
    </script>
</body>

</html>